start := time.Now() timeoutFuture := start.Add(time.Minute * 5) var newClient *client.Client for time.Now().Unix() < timeoutFuture.Unix() { log.Printf("waiting for %s to be connectable....", ip) time.Sleep(5 * time.Second) var errClient error newClient, errClient = client.NewClient(fmt.Sprintf("tcp://%s:2375",ip), client.DefaultVersion, nil, nil) if errClient != nil { log.Printf("current loop's error - %v", errClient) } else if newClient != nil { ping, errClient := newClient.Ping(context.Background()) if errClient == nil { log.Printf("Ping result - docker %v", ping.APIVersion) break; } else { log.Printf("Couldn't ping remote docker machine - %v", errClient) } } }